package com.tecode.myBooks.user.servlet;

import com.tecode.myBooks.user.bean.User;
import com.tecode.myBooks.user.service.UserService;
import com.tecode.myBooks.user.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/***
 * 
 * 要让当前的类是一个Servlet，来接收和相应信息，需要实现Servlet接口
 * servlet的生命周期：（生命周期方法都是由web服务器来调用的，tomcat） 
 * 	1.创建当前servlet的对象 单例对象
 * 	2.对象创建完成后，立即调用他的init初始化方法。 
 * 	3.每次业务请求都调用一次service方法。
 * 	4.当整个工程从服务器中卸载时，调用destroy方法。
 * 
 * 
 * 如何通过一个url地址来访问到当前的Servlet。
 * 
 * 需要配置当前servlet的请求地址。 在web.xml文件中配置。
 *
 */

public class UserServlet implements Servlet {

	public UserServlet() {
		//System.out.println("UserServlet.....");
	}

	static UserServlet u;

	
	/**
	 * destroy:销毁Servlet对象
	 */
	@Override
	public void destroy() {
		//System.out.println("destroy.....");
	}

	/**
	 * getServletConfig 获得当前Servlet的配置对象
	 */
	@Override
	public ServletConfig getServletConfig() {
		//System.out.println("getServletConfig.....");
		return null;
	}

	/**
	 * getServletInfo:获得servelt的信息
	 */
	@Override
	public String getServletInfo() {
		//System.out.println("getServletInfo.....");
		return null;
	}

	/**
	 * init：当前servlet的初始化方法。在该方法的入参传入了ServletConfig的对象。
	 */
	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		//System.out.println("init.....");
	}

	/**
	 * service：每次请求的业务接收处理方法。
	 * ServletRequest:包含所有和请求相关的信息的对象。
	 * 		请求的参数，  前端传入的数据。
	 * 		请求的方式  get post
	 * 		等等等信息
	 * 
	 * 		*1.getParameter(String str):把请求参数的名称传入，返回该参数对应的值。
	 * 		获得请求参数的值的类型都是String。
	 * 
	 * 		2.getParameterNames():获得请求中所有参数的名。
	 * 		Enumeration<String> parameterNames = req.getParameterNames();
		
			while(parameterNames.hasMoreElements()){
				System.out.println(parameterNames.nextElement());
				req.getParameter(parameterNames.nextElement());
			}
			
			
			3.Map<String, String[]> map = req.getParameterMap(); 获得请求中所有参数和值的map集合
			for(Entry<String, String[]> e :map.entrySet()){
				System.out.println(e.getKey() +";" +Arrays.toString(e.getValue()));
			}
			
			*4.getParameterValues(String str):获得传入的请求参数名的多个value值。
	 * 
	 * ServletResponse：包含所有和响应相关的信息
	 */
	@Override
	public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
		System.out.println("service.....");

        HttpServletResponse response =(HttpServletResponse)resp;
		HttpServletRequest request =(HttpServletRequest)req;
		//1.获得请求的方法。
		String account = req.getParameter("account");
		String pwd  =req.getParameter("pwd");

		String code = request.getParameter("code");
		String sessCode = request.getSession().getAttribute("CHECK_CODE_KEY").toString();

		if(!sessCode.equalsIgnoreCase(code)){
			return;
		}
		request.getSession().setAttribute("CHECK_CODE_KEY","");



		String noLogin = request.getParameter("noLogin");
		//req.getParameterValues(arg0);
		//System.out.println(pwd);
		//System.out.println(Arrays.toString(req.getParameterValues("account")));
		
		//2.封装对象
		User user = new User(account, pwd);
		
		//3调用登录的业务处理方法
		UserService userService = new UserServiceImpl();
		
		//设置相应中文出现乱码的情况
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html");
		///响应信息给客户端
		//resp.getWriter().println();
        User queryUser = userService.login(user);

		//判断是否登录成功
		if(queryUser == null){
			response.sendRedirect(req.getServletContext().getContextPath() + "/html/login.jsp");
		}else if(!(queryUser.getPwd().equals(pwd))){
			response.sendRedirect(req.getServletContext().getContextPath() + "/html/login.jsp");
		}else{
			request.getSession().setAttribute("loginUser",queryUser);

			//定义一个Cookie的对象来存放登录的账号信息
			Cookie accountCookie = new Cookie("accountCookie",account);
			//设置登录账号的Cookie持久化
			accountCookie.setMaxAge(60 * 60 *24 *10);

			//设置Cookie的作用范围
			accountCookie.setPath("/");
			//把存放登录账号的Cookie对象添加到响应中
			response.addCookie(accountCookie);

			//判断是否10天免登录
			if(noLogin != null){
					//存放登录的密码
					Cookie pwdCookie = new Cookie("pwdCookie",pwd);

					pwdCookie.setMaxAge(60 * 60 *24 *10);

					//设置Cookie的作用范围
					pwdCookie.setPath("/");
					//把存放登录账号的Cookie对象添加到响应中
					response.addCookie(pwdCookie);
			}
			//request.getRequestDispatcher("/bookServlet?methodName=getBookList").forward(request,response);
			response.sendRedirect(req.getServletContext().getContextPath()+"/bookServlet?methodName=getBookList");
		}


      /*  //登录成功进入 书籍展示的首页
        if(str.equals("登录成功")){
			//System.out.println(req.getServletContext().getContextPath());
			response.sendRedirect(req.getServletContext().getContextPath()+"/bookServlet?methodName=getBookList");

        }else{
                //登录不成功返回重新登录  重定向
                response.sendRedirect(req.getServletContext().getContextPath() + "/html/login.jsp");
        }*/

    }

}
